package OOProgram;

public class Main {
    public static void main(String[] args) {
//        City city = new City();
//        city.name = "北京";
//        city.latitude = 39.90403;
//        city.longitude = 116.407526;
//        Person me = new Person();
//        me.setAge(18);
//        me.setName("小王");
//        Group group = new Group();
//        group.setNames("小王","小李","小张");
//        Person person = new Person();

    }
}

//方法名称相同的方法，参数不同的方法，被称之为方法重载
//通常重载的方法返回值都相同
class Hello {
    public void hello() {
        System.out.println("hello world");
    }

    public void hello(String name) {
        System.out.println("hello " + name);
    }

    public void hello(int age) {
        System.out.println("hello " + age);
    }
}

// 如果直接将类的属性暴漏到外部，可能造成一些风险，所以需要使用到方法，来间接修改field的值：
// String[]是引用类型，入参和收参指向同一个对象，任意一方修改变量的值，都会影响对方；

//可变参数
class Group {
    private String[] names;

    public void setNames(String... names) {
        this.names = names;
    }
    //可变参数可以保证无法传入null
//    public void setNames(String[] names) {
//        this.names = names;
//    }
}

//final class Square extends Shape {}//会报错，因为Square不是Shape的子类
//父类的指针可以指向子类对象，称为向上转型
//子类指针要指向父类对象称为向下转型，这个时候就需要使用强制类型转换，并且需要用instanceof判断对象是否是该类型的实例